const express = require('express')
const app = express()
var path = require('path') // 系统路径模块
var fs = require('fs') // 文件模块
// bodyParser 是用来 解析 post 的包
const bodyParser = require('body-parser')
// 处理静态资源 / 地址下 使用public 中的资源
app.use('/', express.static('public'))
// 处理请求参爱的
app.use(bodyParser.json())
app.use(
  bodyParser.urlencoded({
    extended: false
  })
)

// 设置跨域

app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  // res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header(
    'Access-Control-Allow-Headers',
    'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'
  )
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
  res.header('X-Powered-By', ' 3.2.1')
  res.header('Content-Type', 'application/json;charset=utf-8')
  next()
})

//  路由

// 查询
app.post('/json', (req, res) => {
  var file = path.join(__dirname, './userList.json')

  // 读取json文件
  fs.readFile(file, 'utf-8', function (err, data) {
    if (err) {
      res.send('文件读取失败')
    } else {
      res.send(data)
    }
  })
})

// 添加
app.post('/add', (req, res) => {
  // 读取json文件
  fs.readFile('./userList.json', 'utf-8', function (err, data) {
    if (err) {
      res.send('文件读取失败')
    } else {
      var teacher = data.toString() // 将二进制的数据转换为字符串
      teacher = JSON.parse(teacher) // 将字符串转换为json对象
      teacher.unshift(req.body.params) // 将传来的对象push进数组对象中
      var str = JSON.stringify(teacher) // 因为nodejs的写入文件只认识字符串或者二进制数，所以把json对象转换成字符串重新写入json文件中
      fs.writeFile('./userList.json', str, function (err) {
        if (err) {
          console.error(err)
        }
        res.send('success')
      })
    }
  })
})

// 查询指定信息
app.post('/detail', (req, res) => {
  var file = path.join(__dirname, './userList.json')

  // 读取json文件
  fs.readFile(file, 'utf-8', function (err, data) {
    if (err) {
      res.send('文件读取失败')
    } else {
      data = JSON.parse(data)
      var info = data.find(r => r.id == req.body.params.id)
      res.send(info)
    }
  })
})

// 删除
app.post('/del', (req, res) => {
  fs.readFile('./userList.json', function (err, data) {
    if (err) {
      return console.error(err)
    }
    data = JSON.parse(data)
    for (var i = 0; i < data.length; i++) {
      if (req.body.params.id == data[i].id) {
        data.splice(i, 1)
      }
    }
    // console.log(data)
    var str = JSON.stringify(data)
    fs.writeFile('./userList.json', str, function (err) {
      if (err) {
        console.error(err)
      }
      res.send('----------删除成功------------')
    })
  })
})

//  URL get 第一种传参  通过query传递传递参数
app.post('/edit', (req, res) => {
  fs.readFile('./userList.json', function (err, data) {
    if (err) {
      console.error(err)
    }
    var user = data.toString()
    user = JSON.parse(user)
    // 把数据读出来,然后进行修改
    for (var i = 0; i < user.length; i++) {
      if (req.body.params.id == user[i].id) {
        for (var key in req.body.params) {
          if (user[i][key]) {
            user[i][key] = req.body.params[key]
          }
        }
      }
    }
    var str = JSON.stringify(user)
    fs.writeFile('./userList.json', str, function (err) {
      if (err) {
        console.error(err)
      }
      res.send('--------------------修改成功')
    })
  })
})

// get 第二种传参
app.get('/axios/:id', (req, res) => {
  res.send('axios get(Restful) 传递参数' + req.params.id)
})

// 启动监听
const port = 8080
app.listen(port, () => {
  console.log('running...')
})
